// TODO:

// # include <iostream>
// # include <ctime>
// # include <filesystem>
// # include <cstdarg>
// # include <chrono>
// # include <map>

// # include "Logger.h"

// using namespace glimmer;
// using namespace std;

// static const char* TAG_CORE = "[engine]";
// static const char* TAG_SCRIPT = "[script]";
// static const char* LEVEL_INFO = "[info]";
// static const char* LEVEL_WARNING = "[warning]";
// static const char* LEVEL_ERROR = "[error]";

// static ofstream log_file_stream;    // 输出文件流
// static char buffer[1024];
// // static map<long, filesystem::path> timeToFilePathMap;  

// void Logger::InitLogger(const char* dirPath, const char* filename){
    
//     Logger::file_enabled = true;
//     Logger::console_enabled = true;
//     Logger::autoClearThreshold = 100; // 日志文件存在数量上限
    
//     // 设置标准输出流不使用缓冲区，即时显示到控制台
//     setvbuf(stdout, NULL, _IONBF, 0);

//     if (!filesystem::exists(dirPath)){
//         filesystem::create_directory(dirPath);
//     }
//     auto filePath = filesystem::path(dirPath);
//     char buffer[128];
//     sprintf(buffer, "%s.log", filename); // 格式化输出结果到buffer
//     filePath.append(buffer);
//     // 追加写入模式打开文件
//     log_file_stream.open(filePath.string(), ios::out | ios::app);

//     // 每次初始化，遍历目录下所有文件，记录当前文件数量，如果超出阈值，则触发自动清理
//     // for (const auto& file: filesystem::directory_iterator(dirPath)){
//     //     if (file.is_regular_file()
//     //     && file.path().extension() == ".log"){
//     //         filesystem::file_time_type lastModifyTime = filesystem::last_write_time(file.path());
//     //         // 将时间信息转换为时间戳
//     //         // 将 file_time_type 转换为 system_clock 的 time_point
//     //     }
//     // }
// }

// void Logger::Log(LogLevelEnum level, const char* tag, const char *message){
//     static char outBuffer[1024];
    
//     // 时间信息
//     static char timeBuffer[64];
//     time_t now = time(0);
//     struct tm* t = localtime(&now);
//     strftime(timeBuffer, 64, "[%Y-%m-%d %H:%M:%S]", t);

//     // 级别信息
//     const char* levelBuffer = nullptr;
//     if (LogLevelEnum::info == level){
//         levelBuffer = LEVEL_INFO;
//     }else if (LogLevelEnum::warning == level){
//         levelBuffer = LEVEL_WARNING;
//     }else if (LogLevelEnum::error == level){
//         levelBuffer = LEVEL_ERROR;
//     }

//     // 拼接日志信息字符串
//     sprintf(outBuffer, "%s%s%s - %s\n", timeBuffer, levelBuffer, tag, message);

//     // 分别输出至控制台和文件
//     if (console_enabled){
//         OutputToConsole(level, outBuffer);
//     }
//     if (file_enabled){
//         OutputToFile(outBuffer);
//     }
// }

// void Logger::OutputToConsole(LogLevelEnum level, const char *message)
// {
//     if (level == LogLevelEnum::error){
//         std::cerr << message;
//     }else{
//         std::cout << message;
//     }
// }

// void Logger::OutputToFile(const char *message)
// {
//     log_file_stream << message;
//     log_file_stream.flush();
// }

// void Logger::Info(const char *message, ...)
// {
//     va_list args;   // 专门处理变长参数
//     va_start(args, message);
//     vsprintf(buffer, message, args);
//     va_end(args);
//     Log(LogLevelEnum::info, TAG_CORE, buffer);
// }

// void Logger::Warning(const char *message, ...)
// {
//     va_list args;
//     va_start(args, message);
//     vsprintf(buffer, message, args);
//     va_end(args);
//     Log(LogLevelEnum::warning, TAG_CORE, buffer);
// }

// void Logger::Error(const char *message, ...)
// {
//     va_list args;
//     va_start(args, message);
//     vsprintf(buffer, message, args);
//     va_end(args);
//     Log(LogLevelEnum::error, TAG_CORE, buffer);
// }

// void Logger::InfoScript(const char *message, ...)
// {
//     static char buffer[1024];
//     va_list args;
//     va_start(args, message);
//     vsprintf(buffer, message, args);
//     va_end(args);
//     Log(LogLevelEnum::info, TAG_SCRIPT, buffer);
// }

// void Logger::WarningScript(const char *message, ...)
// {
//     static char buffer[1024];
//     va_list args;
//     va_start(args, message);
//     vsprintf(buffer, message, args);
//     va_end(args);
//     Log(LogLevelEnum::warning, TAG_SCRIPT, buffer);
// }

// void Logger::ErrorScript(const char *message, ...)
// {
//     static char buffer[1024];
//     va_list args;
//     va_start(args, message);
//     vsprintf(buffer, message, args);
//     va_end(args);
//     Log(LogLevelEnum::error, TAG_SCRIPT, buffer);
// }
